<?php

class WSB_Validator_FeuserUsername extends Zend_Validate_Abstract
{

	const EXISTS = 'feuserUsernameExists';

	/**
	 * @var array
	 */
    protected $_messageTemplates = array();

    public function __construct()
	{
		$message = "'%value%' already exists. Please choose another username.";
    	$this->_messageTemplates = array(
			self::EXISTS => $message
       	);
    }

    /**
     * Validiere den Wert. Dabei wird das zweite Argument $context genutzt,
     * indem alle Formularwerte stehen.
     *
     * @param string $value
     * @param array $context
     * @return boolean
     */
    public function isValid($value, array $context = null)
    {
    	$value = trim($value);
        $this->_setValue($value);
        if (!empty($value)) {
	    	$table = new Member_Model_DbTable_Feuser();
	    	$select = $table->select();
	    	$select->where('deleted=?', 0);
    		$select->where('username=?', $value);
    		// Hier wird unterschieden, ob der Datensatz neu erstellt
    		// oder editiert wird. Dies kann ueber einen existenten
    		// Primarykey in den Formulardaten geschehen.
    		$primary = $table->getPrimary();
    		if(!empty($context[$primary])) {
    			$select->where($primary.'<>?', $context[$primary]);
    		}
	    	$row = $table->fetchRow($select);
	    	if($row instanceof Member_Model_DbTable_Feuser_Row) {
	    		$this->_error(self::EXISTS);
	            return false;
	    	}
        }
        return true;
    }
}
